package com.doit.day01;

import redis.clients.jedis.Jedis;

import java.util.Random;
import java.util.Scanner;

/**
 * 需求：使用redis模拟手机验证码发送，验证码有效期60s，验证验证码输入不能超过3次，超过3次就没机会了
 */

/**
 * //验证手机号
 * /**
 *  * 判断字符串是否符合手机号码格式
 *  * 移动号段:   134 135 136 137 138 139 147 148 150 151 152 157 158 159  165 172 178 182 183 184 187 188 198
 *  * 联通号段:   130 131 132 145 146 155 156 166 170 171 175 176 185 186
 *  * 电信号段:   133 149 153 170 173 174 177 180 181 189  191  199
 *  * 虚拟运营商: 170
 *  "[1]"代表下一位为数字可以是几，"[0-9]"代表可以为0-9中的一个，"[5,7,9]"表示可以是5,7,9中的任意一位,[^4]表示除4以外的任何一个,\\d{8}"代表后面是可以是0～9的数字，有8位。
String regex="^((13[0-9])|(14[5,6,7,9])|(15[^4])|(16[5,6])|(17[0-9])|(18[0-9])|(19[1,8,9]))\\d{8}$";
 */
public class PhoneDemo {
    public static void main(String[] args) throws InterruptedException {

        Jedis jedis = new Jedis("linux01", 6379);

        //让你输入手机号
        Scanner sc = new Scanner(System.in);
        System.out.println("主人，请输入您的手机号！！！");
        String phone = sc.nextLine();
        //验证输入的手机号是否正确
        String regex="^((13[0-9])|(14[5,6,7,9])|(15[^4])|(16[5,6])|(17[0-9])|(18[0-9])|(19[1,8,9]))\\d{8}$";
        if(phone.matches(regex)){
            //如果手机号正确的话，发送验证码
            String code = getCode();
            System.out.println(code);
            //将验证码存起来，并且要设置过期时间为60s
            jedis.setex(phone,10,code);
            //自己输入验证码 ==》 和数据库中的验证码进行比较，看你输入的是否正确，如果不正确，再输入一次，总共三次机会
            int count = 1;
            System.out.println("请输入你的验证码！！！");

            while (count <= 3){
                String myCode = sc.nextLine();
                if (myCode.equals(jedis.get(phone))){
                    System.out.println("验证通过，没有奖励！！");
                    break;
                }else {
                    //todo 验证不正确的可能有两种， 第一种验证码不正确   第二种时间超时了，验证码失效了
                    if (count < 3){
                        System.out.println("验证码不正确，请重新输入！！！");
                    }else {
                        System.out.println("没机会了，小伙子，回头再说吧！！");
                    }

                }
                count ++;
            }
        }else {
            //todo 手机号如果不正确，可以输入三次机会等等逻辑

        }






    }

    //发送验证码的方法
    public static String getCode(){
        Random random = new Random();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 6; i++) {
            sb.append(random.nextInt(10));
        }
        return sb.toString();
    }
}
